package com.bigdata.spark.core.rdd.operator.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @author : ranzlupup
 * @date : 2023/3/1 16:14
 */
object RDD_Transform_map_glom {
    def main(args: Array[String]): Unit = {
        val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
        val sparkContext: SparkContext = new SparkContext(sparkConf)
        val RDD: RDD[Int] = sparkContext.makeRDD(List(1, 2, 3, 4, 5, 6, 7, 8))
        val RDD3: RDD[Int] = sparkContext.makeRDD(List(1, 2, 3, 4, 5, 6, 7, 8, 9), 3)

        // TODO RDD转换算子
        //      Value类型
        //      map
        //        val RDD1: RDD[Int] = RDD.map(
        //            item => {
        //                println("------------")
        //                item * 2
        //            })
        //
        //        val RDD2: RDD[Int] = RDD.map(
        //            item => {
        //                println("=============")
        //                item * 2
        //            }
        //        )
        //        RDD1.collect().foreach(println)
        //        RDD2.collect().foreach(println)


        //        RDD3.map(
        //            num => {
        //                println("*****************")
        //                num
        //            }
        //        ).foreach(println)

        // TODO glom()
        //      将同一个分区的数据直接转换为相同类型的内存数组进行处理，分区不变
        val rdd: RDD[Array[Int]] = RDD3.glom()
        rdd.map(_.mkString(", ")).collect().foreach(println)
        println(RDD3.glom()
            .map(_.max)
            .sum())

        println("---------------")
        //      分区数量不变
        println(RDD3.glom().getNumPartitions)
        sparkContext.stop()

    }

}
